﻿using System;
using System.IO;


namespace Helper
{
    public sealed class IO
    {
        /// <summary>
		/// Metodo utilizado para renomear um arquivo 
		/// </summary>
		/// <param name="fileNamel">Nome do arquivo </param>
		/// <param name="newFileName">Novo nome do arquivo</param>
		/// <returns>bool</returns>
		public bool RenameFile(string fileName , string newFileName)
		{
			if(File.Exists(newFileName))
			{
				return false;
			}
			else
			{
				try
				{
					File.Move(fileName , newFileName);
					return true;
				}
				catch(IOException ex)
				{
					ex.Message.ToString(); 
				}
			}
            return false; 
		}

        /// <summary>
       /// Metodo utilizado para criar um arquivo. 
       /// </summary>
       /// <param name="fileName">nome do arquivo que deve ser criado</param>
       /// <param name="overwrite">sobrescreve o  arquivo caso ja exista</param>
       /// <returns>bool</returns>
		public bool CreateFile(string fileName ,bool overwrite)
		{
			try
			{
				if(overwrite)
				{
					File.Create(fileName);
				}
				else
				{
					if(File.Exists(fileName))
					{
						return false; 
					}
					else
					{
						File.Create(fileName);
						return true; 
					}
				}
				return true; 
			}
			catch(IOException ex)
			{
                throw ex;
			}
		}
			
        /// <summary>
        /// Metodo utilizado para saber o numero de linhas de uma arquivo. 
        /// </summary>
        /// <param name="fileName">nome do arquivo</param>
        /// <returns>int</returns>
		public int NumOfLines(string fileName)
		{
			int contador = 0;
            if (File.Exists(fileName))
            {
                using (StreamReader reader = File.OpenText(fileName))
                {
                    while (!reader.EndOfStream)
                    {
                        reader.ReadLine();
                        contador++;
                    }
                }
            }
            return contador; 
		}
		
		/// <summary>
		/// Metodo utilizado para saber o numero de bytes do arquivo
		/// </summary>
		/// <param name="fileName"></param>
		/// <returns></returns>
		public long NumOfBytes(string fileName)
		{
            try
            {
                FileInfo info = new FileInfo(fileName);
                return info.Length;
            }
            catch (IOException ex) 
            {
                throw ex;
            }
		}
		
		/// <summary>
		/// Retorna o conteudo do arquivo. 
		/// </summary>
		/// <returns>
		/// string
		/// </returns>
		/// <param name='arquivo'>
		/// nome do arquivo com o path
		/// </param>
		public string conteudoArquivo(string arquivo)
		{
			string conteudo = null;
			using (StreamReader reader = File.OpenText(arquivo))
			{
				if(!reader.EndOfStream)
				{
					conteudo = reader.ReadToEnd();
				}
				return conteudo;	
			}
		}	
		
	}
}
